é«åºŠãªåæ°åŠãšã«ãªãŒã»ãã¯ãŒã察å¿ããœãããŠã§ã¢ã«é©åœãèµ·ãããæ°åŠçç¢ºå®æ§ã§èšŒæå¯èœãªæ£ããããã°ã©ã ã®äœæãå¯èœã«ããŠããŸãã
é«åºŠãªåæ°åŠ: ã³ãŒããè«çã蚌æãåæãã究極ã®å®å šæ§ãž
ãœãããŠã§ã¢éçºã®äžçã§ã¯ããã°ã¯æ°žç¶çã§ã³ã¹ãã®ãããçŸå®ã§ãã軜埮ãªäžå ·åãã壿» çãªã·ã¹ãã é害ãŸã§ãã³ãŒãã®ãšã©ãŒã¯ãåãå ¥ããããŠãããã®ã®ãèç«ãããããã»ã¹ã®äžéšãšãªã£ãŠããŸããäœå幎ãã®éãããã«å¯Ÿããç§ãã¡ã®äž»ãªæŠåšã¯ãã¹ãã§ãããç§ãã¡ã¯åäœãã¹ããçµ±åãã¹ãããšã³ãããŒãšã³ããã¹ããèšè¿°ãããã¹ãŠãã°ããŠãŒã¶ãŒã«å±ãåã«ãããããã£ããããããšããŠããŸããããããããã¹ãã«ã¯åºæ¬çãªéçããããŸããããã¯ãã°ã®ååšã瀺ãããšã¯ã§ããŠãããã®äžåšã瀺ãããšã¯æ±ºããŠã§ããŸããã
ãã®ãã©ãã€ã ãå€ããããšãã§ãããã©ãã§ããããïŒãšã©ãŒããã¹ãããã ãã§ãªããæ°åŠã®å®çãšåãå³å¯ãã§ããœãããŠã§ã¢ãæ£ããããšããããŠãã¹ãŠã®çš®é¡ã®ãã°ããªãããšã蚌æã§ãããã©ãã§ããããïŒããã¯ç§åŠãã£ã¯ã·ã§ã³ã§ã¯ãããŸãããããã¯ãèšç®æ©ç§åŠãè«çåŠãæ°åŠã亀差ããåéã§ããé«åºŠåçè«ã®çŽæã§ãããã®åéã¯ãã蚌æåå®å šæ§ããæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããããã¯ãåŸæ¥ã®ã¡ãœããã§ã¯å€¢èŠãããšããã§ããªãã¬ãã«ã®ãœãããŠã§ã¢ä¿èšŒã§ãã
ãã®èšäºã§ã¯ããã®çè«çåºç€ããå®éçãªå¿çšãŸã§ããã®é åçãªäžçãæ¡å ããæ°åŠç蚌æãã©ã®ããã«ããŠãçŸä»£ã®ãé«åºŠãªä¿èšŒãå¿ èŠãšãããœãããŠã§ã¢éçºã®äžå¯æ¬ ãªéšåã«ãªãã€ã€ããã®ãã説æããŸãã
åçŽãªãã§ãã¯ããè«ççé©åœãž: ç°¡åãªæŽå²
é«åºŠãªåã®åãçè§£ããããã«ã¯ããŸãåçŽãªåã®åœ¹å²ãçè§£ããå¿
èŠããããŸããJavaãC#ãTypeScriptãªã©ã®èšèªã§ã¯ãåïŒintãstringãboolïŒã¯åºæ¬çãªå®å
šããããšããŠæ©èœããŸããããšãã°ãæ°å€ãšæååãè¶³ããããããŒã«å€ãæåŸ
ãããå Žæã«ãªããžã§ã¯ããæž¡ãããããã®ãé²ããŸããããã¯éçåãã§ãã¯ã§ãããã³ã³ãã€ã«æã«å€æ°ã®äºçްãªãšã©ãŒããã£ããããŸãã
ãããããããã®åçŽãªåã«ã¯éçããããŸããããããå«ãå€ã«ã€ããŠã¯äœãç¥ããŸãããget(index: int, list: List)ã®ãããªé¢æ°ã®åã·ã°ããã£ã¯ãå
¥åã®åãæããŠãããŸãããè² ã®ã€ã³ããã¯ã¹ããæå®ããããªã¹ãã®ç¯å²å€ã®ã€ã³ããã¯ã¹ãæž¡ãããšãé²ãããšã¯ã§ããŸãããããã¯ãIndexOutOfBoundsExceptionã®ãããªå®è¡æäŸå€ã«ã€ãªãããã¯ã©ãã·ã¥ã®äžè¬çãªåå ãšãªããŸãã
ãã®é©åœã¯ãã¢ãã³ãŸã»ãã£ãŒãïŒã©ã ãèšç®ïŒããã¹ã±ã«ã»ã«ãªãŒïŒçµã¿åããè«çïŒãªã©ã®è«çåŠãšèšç®æ©ç§åŠã®å é§è ãã¡ããæ°åŠçè«çãšèšç®ã®éã®æ·±ãé¢ä¿ãæ¢æ±ãå§ãããšãã«å§ãŸããŸããã圌ãã®ç ç©¶ã¯ãããã°ã©ãã³ã°ãæ°žé ã«å€ããããšã«ãªããæ·±é ãªèªèã®åºç€ãç¯ããŸããã
èŠç³: ã«ãªãŒã»ãã¯ãŒã察å¿
蚌æåå®å šæ§ã®æ žå¿ã¯ãã«ãªãŒã»ãã¯ãŒã察å¿ãšããŠãç¥ããããåœé¡ã¯åã§ãããã蚌æã¯ããã°ã©ã ã§ããããšããååãšåŒã°ãã匷åãªæŠå¿µã«ãããŸããããã¯ãè«çãšèšç®ã®éã®çŽæ¥çãã€åœ¢åŒçãªåçæ§ã確ç«ããŸãããã®æ žå¿ã¯ã次ã®ããã«è¿°ã¹ãŠããŸãã
- è«çåŠã«ãããåœé¡ã¯ãããã°ã©ãã³ã°èšèªã«ãããåã«å¯Ÿå¿ããŸãã
- ãã®åœé¡ã®èšŒæã¯ããã®åã®ããã°ã©ã ïŒãŸãã¯é ïŒã«å¯Ÿå¿ããŸãã
ããã¯æœè±¡çã«èããããããããªãã®ã§ãäŸã話ã§åè§£ããŠã¿ãŸããããè«çåœé¡ãèããŠã¿ãŸãããããããªããç§ã«éµïŒåœé¡AïŒãæž¡ãã°ãç§ã¯ããªãã«è»ãžã®ã¢ã¯ã»ã¹ãæäŸã§ããŸãïŒåœé¡BïŒã
åã®äžçã§ã¯ãããã¯é¢æ°ã®ã·ã°ããã£ã«å€æãããŸããopenCar(key: Key): CarãåKeyã¯åœé¡Aã«å¯Ÿå¿ããåCarã¯åœé¡Bã«å¯Ÿå¿ããŸãã颿°openCarèªäœã蚌æã§ãããã®é¢æ°ãæ£åžžã«èšè¿°ããããšïŒããã°ã©ã ãå®è£
ããããšïŒã«ãã£ãŠãKeyãäžããããå Žåã«ã確ãã«Carãçæã§ããããšãæ§ç¯çã«èšŒæããããšã«ãªããŸãã
ãã®å¯Ÿå¿ã¯ããã¹ãŠã®è«ççµååã«çŸããæ¡åŒµãããŸãã
- è«çç©ïŒA â§ BïŒïŒããã¯ç©åïŒã¿ãã«ãŸãã¯ã¬ã³ãŒãïŒã«å¯Ÿå¿ããŸããA AND Bã蚌æããã«ã¯ãAã®èšŒæãšBã®èšŒæãæäŸããå¿
èŠããããŸããããã°ã©ãã³ã°ã§ã¯ãå
(A, B)ã®å€ãäœæããã«ã¯ãåAã®å€ãšåBã®å€ãæäŸããå¿ èŠããããŸãã - è«çåïŒA âš BïŒïŒããã¯ååïŒã¿ã°ä»ããŠããªã³ãŸãã¯enumïŒã«å¯Ÿå¿ããŸããA OR Bã蚌æããã«ã¯ãAã®èšŒæãŸãã¯Bã®èšŒæãæäŸããå¿
èŠããããŸããããã°ã©ãã³ã°ã§ã¯ãå
Eitherã®å€ã¯ãåAã®å€ãŸãã¯åBã®å€ã®ããããäžæ¹ãä¿æããŸãããäž¡æ¹ãä¿æããããšã¯ã§ããŸããã - è«ççåž°çµïŒA â BïŒïŒåè¿°ã®ããã«ãããã¯é¢æ°åã«å¯Ÿå¿ããŸãããAãBãæå³ãããã®èšŒæã¯ãAã®èšŒæãBã®èšŒæã«å€æãã颿°ã§ãã
- è«ççèåœïŒâ¥ïŒïŒããã¯ã空ã®åïŒå€ãã®å Žåã
VoidãŸãã¯NeverãšåŒã°ããïŒã«å¯Ÿå¿ããŸããããã¯ãå€ãäœæã§ããªãåã§ããVoidãè¿ã颿°ã¯ãççŸã®èšŒæã§ããã€ãŸããå®éã«ã¯æ±ºããŠè¿ãããšãã§ããªãããã°ã©ã ã§ãããå ¥åãäžå¯èœã§ããããšã蚌æããŸãã
ãã®æå³åãã¯é©ãã¹ããã®ã§ããååã«åŒ·åãªåã·ã¹ãã ã§åä»ããããããã°ã©ã ãèšè¿°ããããšã¯ã圢åŒçãªãæ©æ¢°ã§ãã§ãã¯ãããæ°åŠç蚌æãèšè¿°ããããšãšåçã§ããã³ã³ãã€ã©ã¯èšŒæãã§ãã«ãŒã«ãªããŸããããã°ã©ã ãã³ã³ãã€ã«ãããã°ãããªãã®èšŒæã¯æå¹ã§ãã
åŸå±åã®ç޹ä»: åã«ãããå€ã®å
ã«ãªãŒã»ãã¯ãŒã察å¿ã¯ãåŸå±åã®å°å ¥ã«ããçã«åçã«å€åããŸããåŸå±åã¯ãå€ã«äŸåããåã§ããããã¯ãããã°ã©ã ã«é¢ããéåžžã«è±ãã§æ£ç¢ºãªããããã£ããåã·ã¹ãã ã§çŽæ¥è¡šçŸã§ããéèŠãªé£èºã§ãã
ãªã¹ãã®äŸãããäžåºŠèŠãŠã¿ãŸããããåŸæ¥ã®åã·ã¹ãã ã§ã¯ãåListã¯ãªã¹ãã®é·ããç¥ããŸãããåŸå±åã䜿çšãããšãVect n Aã®ãããªåãå®çŸ©ã§ããŸããããã¯ãããã¯ãã«ãïŒåã«é·ãããšã³ã³ãŒãããããªã¹ãïŒã衚ããåAã®èŠçŽ ãå«ã¿ãã³ã³ãã€ã«æã«æ¢ç¥ã®é·ãnãæã¡ãŸãã
ãããã®åãèããŠã¿ãŸãããã
Vect 0 Int: æŽæ°ã®ç©ºã®ãã¯ãã«ã®åãVect 3 String: ã¡ããã©3ã€ã®æååãå«ããã¯ãã«ã®åãVect (n + m) A: é·ããä»ã®2ã€ã®æ°å€nãšmã®åèšã§ãããã¯ãã«ã®åã
å®çšçãªäŸ: å®å
šãªhead颿°
å®è¡æãšã©ãŒã®å
žåçãªåå ã¯ã空ã®ãªã¹ãã®æåã®èŠçŽ ïŒheadïŒãååŸããããšããããšã§ããåŸå±åããã®åé¡ãæ ¹æ¬ããã©ã®ããã«æé€ããããèŠãŠã¿ãŸãããããã¯ãã«ãåãåãããã®æåã®èŠçŽ ãè¿ã颿°headãèšè¿°ããããšããŸãã
ç§ãã¡ã蚌æãããè«çåœé¡ã¯æ¬¡ã®ãšããã§ãããä»»æã®åAãšä»»æã®èªç¶æ°nã«ã€ããŠãé·ãn+1ã®ãã¯ãã«ãæž¡ããšãåAã®èŠçŽ ãæäŸã§ããŸãããé·ãn+1ã®ãã¯ãã«ã¯ã空ã§ãªãããšãä¿èšŒãããŠããŸãã
Idrisã®ãããªåŸå±åä»ããããèšèªã§ã¯ãåã·ã°ããã£ã¯æ¬¡ã®ããã«ãªããŸãïŒããããããããããã«ç°¡ç¥åãããŠããŸãïŒã
head : (n : Nat) -> Vect (1 + n) a -> a
ãã®ã·ã°ããã£ãåè§£ããŠã¿ãŸãããã
(n : Nat): 颿°ã¯æé»ã®åŒæ°ãšããŠèªç¶æ°nãåãåããŸããVect (1 + n) a: 次ã«ãã³ã³ãã€ã«æã«ãã®é·ãã蚌æããããã¯ãã«ãåãåããŸãã1 + nïŒã€ãŸããå°ãªããšã1ïŒãa: åaã®å€ãè¿ãããšãä¿èšŒãããŠããŸãã
ããã§ããã®é¢æ°ã空ã®ãã¯ãã«ã§åŒã³åºãããšãããšããŸãã空ã®ãã¯ãã«ã®åã¯Vect 0 aã§ããã³ã³ãã€ã©ã¯ãåVect 0 aãå¿
èŠãªå
¥ååVect (1 + n) aãšäžèŽãããããšããŸããæ¹çšåŒ0 = 1 + nãèªç¶æ°nã«ã€ããŠè§£ãããšããŸãããã®æ¹çšåŒãæºããèªç¶æ°nããªããããã³ã³ãã€ã©ã¯åãšã©ãŒãçºçãããŸããããã°ã©ã ã¯ã³ã³ãã€ã«ãããŸããã
ããªãã¯åã·ã¹ãã ã䜿çšããŠãããã°ã©ã ã空ã®ãªã¹ãã®å é ã«ã¢ã¯ã»ã¹ããããšããããšã¯ãªãããšã蚌æããã®ã§ãããã®ãã¹ãŠã®çš®é¡ã®ãã°ã¯ããã¹ãã§ã¯ãªããã³ã³ãã€ã©ã«ãã£ãŠæ€èšŒãããæ°åŠç蚌æã«ãã£ãŠæ ¹çµ¶ãããŸãã
ã¢ã¯ã·ã§ã³ã«ãããèšŒææ¯æŽç³»: CoqãAgdaãIdris
ãããã®ã¢ã€ãã¢ãå®è£ ããèšèªãšã·ã¹ãã ã¯ãå€ãã®å ŽåããèšŒææ¯æŽç³»ããŸãã¯ã察話åå®ç蚌æç³»ããšåŒã°ããŸãããããã¯ãéçºè ãããã°ã©ã ãšèšŒæã飿ºããŠèšè¿°ã§ããç°å¢ã§ãããã®åéã§æãæåãª3ã€ã®äŸã¯ãCoqãAgdaãIdrisã§ãã
Coq
ãã©ã³ã¹ã§éçºãããCoqã¯ãæãæçããå®çšçãªèšŒææ¯æŽç³»ã®1ã€ã§ããããã¯ãåž°çŽçæ§æã®èšç®ãšåŒã°ããè«ççåºç€ã«åºã¥ããŠããŸããCoqã¯ãæ£ç¢ºããæãéèŠãªäž»èŠãªåœ¢åŒæ€èšŒãããžã§ã¯ãã§äœ¿çšãããŠããããšã§æåã§ãããã®æãæåãªæåã«ã¯ã以äžãå«ãŸããŸãã
- åè²å®çïŒæåãªæ°åŠå®çã®åœ¢åŒçãªèšŒæãããã¯ãæäœæ¥ã§æ€èšŒããããšãéåžžã«å°é£ã§ããã
- CompCertïŒCoqã§æ£åŒã«æ€èšŒãããCã³ã³ãã€ã©ãã€ãŸããã³ã³ãã€ã«ãããå®è¡å¯èœã³ãŒãããœãŒã¹Cã³ãŒãã§æå®ããããšããã«æ£ç¢ºã«åäœããããšãç€ºãæ©æ¢°ã§ãã§ãã¯ããã蚌æããããã³ã³ãã€ã©ã«ãã£ãŠå°å ¥ããããã°ã®ãªã¹ã¯ãæé€ããŸããããã¯ããœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ã«ãããèšå¿µç¢çãªææã§ãã
Coqã¯ããã®è¡šçŸåãšå³å¯ããããã¢ã«ãŽãªãºã ãããŒããŠã§ã¢ãããã³æ°åŠçå®çã®æ€èšŒã«ãã䜿çšãããŸãã
Agda
ã¹ãŠã§ãŒãã³ã®ãã£ã«ããŒã¹å·¥ç§å€§åŠã§éçºãããAgdaã¯ãåŸå±åä»ãããã颿°åããã°ã©ãã³ã°èšèªããã³èšŒææ¯æŽç³»ã§ããããã¯ãMartin-Löfåçè«ã«åºã¥ããŠããŸããAgdaã¯ãæ°åŠçè¡šèšæ³ã«äŒŒããããã«Unicodeãå€çšããæ°åŠçèæ¯ãæã€äººã«ãšã£ãŠèšŒæãããèªã¿ãããããã¯ãªãŒã³ãªæ§æã§ç¥ãããŠããŸããåçè«ãšããã°ã©ãã³ã°èšèªèšèšã®æåç·ãæ¢çŽ¢ããããã®åŠè¡ç ç©¶ã§é »ç¹ã«äœ¿çšãããŠããŸãã
Idris
è±åœã®ã»ã³ãã¢ã³ãã«ãŒãºå€§åŠã§éçºãããIdrisã¯ãç¹å®ã®ç®æšãã€ãŸãåŸå±åãäžè¬çãªãœãããŠã§ã¢éçºã«å®çšçãã€ã¢ã¯ã»ã¹ããããããããã«èšèšãããŸãããäŸç¶ãšããŠåŒ·åãªèšŒææ¯æŽç³»ã§ããããã®æ§æã¯ãHaskellãªã©ã®ã¢ãã³ãªé¢æ°åèšèªã®ããã«æããããŸããIdrisã¯ãåé§åéçºã®ãããªæŠå¿µã玹ä»ããŠããŸããããã¯ãéçºè ãåã·ã°ããã£ãèšè¿°ããã³ã³ãã€ã©ãæ£ããå®è£ ãã¬ã€ãããã€ã³ã¿ã©ã¯ãã£ããªã¯ãŒã¯ãããŒã§ãã
ããšãã°ãIdrisã§ã¯ãã³ãŒãã®ç¹å®ã®ç®æã§ãµãåŒã®åãã©ãããã¹ããã³ã³ãã€ã©ã«å°ããããç¹å®ã®ç©Žãåããããšãã§ãã颿°ãæ€çŽ¢ããããã«å°ãããããããšãã§ããŸãããã®ã€ã³ã¿ã©ã¯ãã£ããªæ§è³ªã¯ãåå ¥éå£ãäžããéçºè ãšã³ã³ãã€ã©ã®éã®ããå調çãªããã»ã¹ã§èšŒæå¯èœãªæ£ãããœãããŠã§ã¢ã®èšè¿°ãå¯èœã«ããŸãã
äŸ: Idrisã§ã®ãªã¹ã远å ã®æçæ§ã®èšŒæ
ç°¡åãªããããã£ã蚌æããŸãããã空ã®ãªã¹ããä»»æã®ãªã¹ãxsã«è¿œå ãããšãxsãçæãããŸããå®çã¯append(xs, []) = xsã§ãã
Idrisã§ã®èšŒæã®åã·ã°ããã£ã¯æ¬¡ã®ããã«ãªããŸãã
appendNilRightNeutral : (xs : List a) -> append xs [] = xs
ããã¯ãä»»æã®ãªã¹ãxsã«ã€ããŠãappend xs []ãxsãšçãããšãã蚌æïŒçåŒåã®å€ïŒãè¿ã颿°ã§ããæ¬¡ã«ãåž°çŽæ³ã䜿çšããŠãã®é¢æ°ãå®è£
ããIdrisã³ã³ãã€ã©ã¯ãã¹ãŠã®ã¹ãããããã§ãã¯ããŸããã³ã³ãã€ã«ããããšããã¹ãŠã®å¯èœãªãªã¹ãã«ã€ããŠå®çã蚌æãããŸãã
å®çšçãªã¢ããªã±ãŒã·ã§ã³ãšã°ããŒãã«ãªåœ±é¿
ããã¯åŠè¡çãªãã®ã«èŠãããããããŸãããã蚌æåå®å šæ§ã¯ããœãããŠã§ã¢ã®å€±æãèš±ãããªãæ¥çã«å€§ããªåœ±é¿ãäžããŠããŸãã
- èªç©ºå®å®ããã³èªåè»ïŒèªç©ºç®¡å¶ãœãããŠã§ã¢ãŸãã¯èªåŸèµ°è¡ã·ã¹ãã ã®å Žåããã°ã¯èŽåœçãªçµæãããããå¯èœæ§ããããŸãããããã®åéã®äŒæ¥ã¯ã圢åŒçææ³ãšCoqãªã©ã®ããŒã«ã䜿çšããŠãéèŠãªã¢ã«ãŽãªãºã ã®æ£ç¢ºæ§ãæ€èšŒããŠããŸãã
- æå·é貚ãšãããã¯ãã§ãŒã³ïŒEthereumãªã©ã®ãã©ãããã©ãŒã äžã®ã¹ããŒãã³ã³ãã©ã¯ãã¯ãæ°ååãã«çžåœã®è³ç£ã管çããŠããŸããã¹ããŒãã³ã³ãã©ã¯ãã®ãã°ã¯äžå€ã§ãããåãè¿ãã®ã€ããªãééçæå€±ã«ã€ãªããå¯èœæ§ããããŸããåœ¢åŒæ€èšŒã¯ãã³ã³ãã©ã¯ãã®ããžãã¯ãå¥å šã§ãããå±éåã«è匱æ§ããªãããšã蚌æããããã«äœ¿çšãããŸãã
- ãµã€ããŒã»ãã¥ãªãã£ïŒæå·åãããã³ã«ãšã»ãã¥ãªãã£ã«ãŒãã«ãæ£ããå®è£ ãããŠããããšãæ€èšŒããããšã¯éåžžã«éèŠã§ãã圢åŒçãªèšŒæã¯ããããã¡ãªãŒããŒãããŒãã¬ãŒã¹ã³ã³ãã£ã·ã§ã³ãªã©ã®ç¹å®ã®çš®é¡ã®ã»ãã¥ãªãã£ããŒã«ããªãããšãã·ã¹ãã ã«ä¿èšŒã§ããŸãã
- ã³ã³ãã€ã©ããã³OSéçºïŒCompCertïŒã³ã³ãã€ã©ïŒãseL4ïŒãã€ã¯ãã«ãŒãã«ïŒãªã©ã®ãããžã§ã¯ãã¯ãåäŸã®ãªãã¬ãã«ã®ä¿èšŒãåããåºç€ãšãªããœãããŠã§ã¢ã³ã³ããŒãã³ããæ§ç¯ããããšãå¯èœã§ããããšã蚌æããŠããŸããseL4ãã€ã¯ãã«ãŒãã«ã¯ããã®å®è£ ã®æ£ç¢ºæ§ã«ã€ããŠåœ¢åŒçãªèšŒæãæã£ãŠãããäžçã§æãå®å šãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãŒãã«ã®1ã€ã«ãªã£ãŠããŸãã
課é¡ãšèšŒæå¯èœãªæ£ãããœãããŠã§ã¢ã®æªæ¥
ãã®åã«ãããããããåŸå±åãšèšŒææ¯æŽç³»ã®æ¡çšã«ã¯èª²é¡ããªãããã§ã¯ãããŸããã
- æ¥ãªåŠç¿æ²ç·ïŒåŸå±åã®èгç¹ããèããã«ã¯ãåŸæ¥ã®ããã°ã©ãã³ã°ããã®èãæ¹ã®è»¢æãå¿ èŠã§ããå€ãã®éçºè ã«ãšã£ãŠãããçšåºŠã®æ°åŠçããã³è«ççå³å¯ããæ±ãããããããåšå§çã«ãªãå¯èœæ§ããããŸãã
- 蚌æã®è² æ ïŒèšŒæã®èšè¿°ã¯ãåŸæ¥ã®ã³ãŒããšãã¹ãã®èšè¿°ãããæéããããå ŽåããããŸããéçºè ã¯ãå®è£ ãæäŸããã ãã§ãªãããã®æ£ç¢ºæ§ã«é¢ãã圢åŒçãªè°è«ãæäŸããå¿ èŠããããŸãã
- ããŒã«ãšãšã³ã·ã¹ãã ã®æç床ïŒIdrisãªã©ã®ããŒã«ã¯å€§ããªé²æ©ãéããŠããŸããããšã³ã·ã¹ãã ïŒã©ã€ãã©ãªãIDEãµããŒããã³ãã¥ããã£ãªãœãŒã¹ïŒã¯ãPythonãJavaScriptãªã©ã®äž»èŠãªèšèªãããæçããŠããŸããã
ããããæªæ¥ã¯æããã§ãããœãããŠã§ã¢ãç§ãã¡ã®ç掻ã®ããããåŽé¢ã«æµžéãç¶ããã«ã€ããŠãããé«ãä¿èšŒã®éèŠã¯å¢å€§ããã°ããã§ããä»åŸã®éã«ã¯ã次ã®ãã®ãå«ãŸããŸãã
- 人éå·¥åŠã®æ¹åïŒèšèªãšããŒã«ã¯ãã䜿ãããããªãããšã©ãŒã¡ãã»ãŒãžãæ¹åããããã匷åãªèªåèšŒææ€çŽ¢ãè¡ãããããšã§ãéçºè ã®æäœæ¥ã®è² æ ã軜æžãããŸãã
- 段éçåä»ãïŒäž»èŠãªèšèªããªãã·ã§ã³ã®åŸå±åãçµã¿èŸŒãããã«ãªããéçºè ã¯ããã«ãªã©ã€ããªãã§ãæãéèŠãªã³ãŒãããŒã¹ã®éšåã«ã®ã¿ãã®å³å¯ããé©çšã§ããããã«ãªãå¯èœæ§ããããŸãã
- æè²ïŒãããã®æŠå¿µãããäž»æµã«ãªãã«ã€ããŠãèšç®æ©ç§åŠã®ã«ãªãã¥ã©ã ã§ããæ©ãå°å ¥ããã蚌æã®èšèªã«å ªèœãªæ°ããäžä»£ã®ãšã³ãžãã¢ãèªçããŸãã
ã¯ããã«: åæ°åŠãžã®æ
蚌æåå®å šæ§ã®åã«èå³ãããå Žåã¯ãæ ãå§ããããã®ããã€ãã®æé ã以äžã«ç€ºããŸãã
- æŠå¿µããå§ããïŒèšèªã«é£ã³èŸŒãåã«ãäžæ žãšãªãã¢ã€ãã¢ãçè§£ããŠãã ãããã«ãªãŒã»ãã¯ãŒã察å¿ãšé¢æ°åããã°ã©ãã³ã°ã®åºæ¬ïŒäžå€æ§ãçŽç²ãªé¢æ°ïŒã«ã€ããŠèªãã§ãã ããã
- å®çšçãªèšèªã詊ãïŒIdrisã¯ãããã°ã©ããŒã«ãšã£ãŠåªããåºçºç¹ã§ããEdwin Bradyèã®ãType-Driven Development with Idrisãã¯ãçŽ æŽãããå®è·µçãªå ¥éæžã§ãã
- æ£åŒãªåºç€ãæ¢ãïŒæ·±ãçè«ã«èå³ããã人ã®ããã«ããªã³ã©ã€ã³æžç±ã·ãªãŒãºãSoftware Foundationsãã¯ãCoqã䜿çšããŠãè«çåŠãåçè«ãåœ¢åŒæ€èšŒã®ååãæåããæããŠããŸããããã¯ãäžçäžã®å€§åŠã§äœ¿çšãããŠãããããããã®ãããéåžžã«ããããã®ãããªãœãŒã¹ã§ãã
- èãæ¹ãã·ããããïŒåãå¶çŽãšããŠã§ã¯ãªããäž»èŠãªèšèšããŒã«ãšããŠèãå§ããŠãã ãããå®è£ ã1è¡ãèšè¿°ããåã«ãèªåèªçããŠãã ããããéæ³ãªç¶æ ã衚çŸã§ããªãããã«ããããã«ãåã«ã©ã®ãããªããããã£ããšã³ã³ãŒãã§ããŸããïŒã
çµè«: ããä¿¡é Œæ§ã®é«ãæªæ¥ãæ§ç¯ãã
é«åºŠãªåæ°åŠã¯ãåŠè¡çãªå¥œå¥å¿ä»¥äžã®ãã®ã§ããããã¯ããœãããŠã§ã¢ã®å質ã«å¯Ÿããèãæ¹ã®æ ¹æ¬çãªå€åã衚ããŠããŸãããã°ãèŠã€ããŠä¿®æ£ãããšããåå¿çãªäžçãããèšèšã«ãã£ãŠæ£ããããã°ã©ã ãæ§ç¯ãããšããç©æ¥µçãªäžçãžãšç§ãã¡ãå°ããŸããæ§æãšã©ãŒããã£ããããé·å¹Žã®ããŒãããŒã§ããã³ã³ãã€ã©ã¯ãè«ççæšè«ã«ãããå ±åè ãã€ãŸãç§ãã¡ã®äž»åŒµãæå¹ã§ããããšãä¿èšŒããããããŸã¬ã现å¿ã®æ³šæãæã£ã蚌æãã§ãã«ãŒãžãšé«ããããŸãã
åºç¯ãªæ¡çšãžã®éã®ãã¯é·ããã®ã«ãªãã§ããããããã®ç®çå°ã¯ãããå®å šã§ãããä¿¡é Œæ§ãé«ããããå ç¢ãªãœãããŠã§ã¢ãåããäžçã§ããã³ãŒããšèšŒæã®åæãåãå ¥ããããšã«ãã£ãŠãç§ãã¡ã¯åã«ããã°ã©ã ãèšè¿°ããŠããã®ã§ã¯ãªããçµ¶æçã«ãããå¿ èŠãšããŠããããžã¿ã«äžçã§ç¢ºå®æ§ãæ§ç¯ããŠããã®ã§ãã